/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.unicon.autoservicio.view.bean;

import com.unicon.autoservicio.bean.GuiaDeRemisionViewBean;
import com.unicon.autoservicio.dao.CalidadDAO;
import com.unicon.autoservicio.enumeradores.EEstadoEnsayoConcreto;
import com.unicon.autoservicio.enumeradores.ETipoComunicado;
import com.unicon.autoservicio.util.Util;
import com.unicon.sdc.ds.ws.GuiaDeRemisionBean;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.ValueChangeEvent;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.XMLGregorianCalendar;

/**
 *
 * @author jcabrera
 */
public class ConsultaGuiaRemisionBean extends BaseManageBean {

    private ResourceBundle bundle = ResourceBundle.getBundle("application");
    private Date fechaVaceadoDesde;
    private Date fechaVaceadoHasta;
    private boolean selectedFgMuestreo;
    private String mensajeGuiasRemision;
    private List<GuiaDeRemisionViewBean> guiasVb;
    private List<GuiaDeRemisionBean> guias;
    private UIParameter serieGuiaPdf;
    private UIParameter numeroGuiaPdf;
    private UIParameter fgPerdida;
    private UIParameter moPerdida;
    private String imagenPdf;
    private String altPdf;
    private String imagenFalla;
    private String altFalla;
    private String imagenPerdida;
    private String altPerdida;
    private String imagenRelog;
    private String altRelog;
    private String serieGuia;
    private String numeroGuia;
    private String selectedTipoResultado;
    private String exportarCertificadosPdf;


    public ConsultaGuiaRemisionBean() {
        mensajeGuiasRemision = "";
       
        numeroGuia = "";
        fechaVaceadoDesde = new Date(System.currentTimeMillis());
        fechaVaceadoHasta = new Date(System.currentTimeMillis());
        guiasVb = new ArrayList<GuiaDeRemisionViewBean>();

        imagenPdf = bundle.getString("unicon.imagen.pdf");
        altPdf = bundle.getString("unicon.imagen.pdf.certificado.alt");

        imagenRelog = bundle.getString("unicon.imagen.relog");
        altRelog = bundle.getString("unicon.imagen.relog.certificado.alt");

        imagenPerdida = bundle.getString("unicon.imagen.perdida");
        altPerdida = bundle.getString("unicon.imagen.perdida.certificado.alt");
        imagenFalla = bundle.getString("unicon.imagen.falla");
        altFalla = bundle.getString("unicon.imagen.falla.certificado.alt");

    }

    public boolean btnBuscarActionPerformed(ActionEvent event) throws DatatypeConfigurationException {
        setMensajeGuiasRemision("");
        if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
            return true;
        }

        if (getFechaVaceadoDesde().compareTo(getFechaVaceadoHasta()) > 0) {


            setMensajeGuiasRemision("La fecha Desde debe ser menor a la fecha Hasta.");
            return true;
        }



        UsuarioBean usuarioBean = getSessionUser();




      
        String   fgMuestreo = "S";
            
        XMLGregorianCalendar fi, ff;
        fi = Util.dateToXMLGregorian(getFechaVaceadoDesde());
        ff = Util.dateToXMLGregorian(getFechaVaceadoHasta());
        guias = null;
        guiasVb = null;
        guiasVb = new ArrayList<GuiaDeRemisionViewBean>();
        CalidadDAO calidadDao = new CalidadDAO();
        guias = calidadDao.getGuiasRemisionAutoservicio(fi, ff, fgMuestreo, getSelectedObra(), usuarioBean.getCodigoCliente(), serieGuia, numeroGuia, selectedTipoResultado, usuarioBean.getCodigoUsuario(), usuarioBean.getClave());
        GuiaDeRemisionViewBean guiaVb = null;
        for (GuiaDeRemisionBean guia : guias) {
            guiaVb = new GuiaDeRemisionViewBean(guia);
            /*CERTIFICADOS EN PROCESO*/
            if (guia.isFgMuestreo() && !guia.isFgPerdida() && !guia.getEstadoEnsayoCompresion().equals(EEstadoEnsayoConcreto.APROBADA.value())) {
                guiaVb.setFgEnProceso(Boolean.TRUE);
                guiaVb.setRutaImagen(imagenRelog);
                guiaVb.setAltImagen(altRelog);
            }
            /*CERTIFICADOS EN APROBADOS*/
            if (guia.isFgMuestreo() && !guia.isFgPerdida() && guia.getEstadoEnsayoCompresion().equals(EEstadoEnsayoConcreto.APROBADA.value())) {
                /*CUMPLEN 28 DIAS*/
                if (guiaVb.getDiasFaltantes() == 0) {
                    guiaVb.setRutaImagen(imagenPdf);
                    guiaVb.setAltImagen(altPdf);
                } else {
                    guiaVb.setFgEnProceso(Boolean.TRUE);
                    guiaVb.setRutaImagen(imagenRelog);
                    guiaVb.setAltImagen(altRelog);
                }
            }

            /*CERTIFICADOS CON PERDIDA*/
            if (guia.isFgPerdida()) {
                if (guia.getMotivoPerdida().equals(ETipoComunicado.PERDIDA_PROBETAS.value())) {
                    guiaVb.setRutaImagen(imagenPerdida);
                    guiaVb.setAltImagen(altPerdida);
                } else {
                    guiaVb.setRutaImagen(imagenFalla);
                    guiaVb.setAltImagen(altFalla);
                }
            }
            
          
              /*CERTIFICADOS CON PERDIDA y todavia no se han definido sus motivo*/
            if (guia.isFgPerdida() && guia.getMotivoPerdida().equals("   ")) {

                    guiaVb.setFgEnProceso(Boolean.TRUE);
                    guiaVb.setRutaImagen(imagenRelog);
                    guiaVb.setAltImagen(altRelog);
            }

            getGuiasVb().add(guiaVb);
        }



        return true;
    }

    public String getExportarCertificadosPdf() {
        boolean flCertificado = false;
        boolean flcomunicado = false;
        StringBuffer lista = new StringBuffer();
        setMensajeGuiasRemision("");

        if (guiasVb.size()>0) {

            for (GuiaDeRemisionViewBean guia : guiasVb) {

                if (guia.isSelected()) {
                    if (guia.getMotivoPerdida().equals(ETipoComunicado.FALLO_PROBETAS.value())
                            || guia.getMotivoPerdida().equals(ETipoComunicado.PERDIDA_PROBETAS.value())) {
                        lista.append(guia.getSerieGuia()).append("-").append(guia.getNumeroGuia()).append("-").append(guia.getMotivoPerdida()).append(",");
                        flcomunicado = true;
                    } else {
                        flCertificado = true;
                        lista.append(guia.getSerieGuia()).append("-").append(guia.getNumeroGuia()).append(",");
                    }

                    if (flcomunicado && flCertificado) {


                        setMensajeGuiasRemision("¡No puede seleccionar documentos en formatos diferentes. Por favor, vuelva a seleccionar!");
                        return "";
                    }
                }
            }

            FacesContext fc = FacesContext.getCurrentInstance();
            UsuarioBean usuarioBean = getSessionUser();
            

            if (flCertificado) {
                return fc.getExternalContext().getRequestContextPath() + "/ExportarPDF?reporte=exportarListaCertificadoCompresion&lista=" + lista.toString();
            } else {
                return fc.getExternalContext().getRequestContextPath() + "/ExportarPDF?reporte=exportarListaComunicadoCalidad&lista=" + lista.toString() ;

            }

        } else {

         
            return "";

        }
    }

 

    public String getExportarPdf() {
        String serieGuia = getSerieGuiaPdf().getValue().toString();
        String numeroGuia = getNumeroGuiaPdf().getValue().toString();
        String flagPerdida = getFgPerdida().getValue().toString();
        String motivoPerdida = getMoPerdida().getValue().toString();
        FacesContext fc = FacesContext.getCurrentInstance();
        return fc.getExternalContext().getRequestContextPath() + "/ExportarPDF?reporte=ExportarCertificadoCompresion&serieGuia=" + serieGuia + "&numeroGuia=" + numeroGuia + "&flagPerdida=" + flagPerdida + "&motivoPerdida=" + motivoPerdida;
    }

    public boolean selectedCheck(ValueChangeEvent e) {

        if (!e.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {


            e.setPhaseId(PhaseId.INVOKE_APPLICATION);
            e.queue();
            return true;
        }

        if (logger.isDebugEnabled()) {
        }
        for (GuiaDeRemisionViewBean guia : guiasVb) {
            logger.debug("estoy en selectedCheck" + guia.getEstadoEnsayoCompresion());

            if (guia.getEstadoEnsayoCompresion().equals(EEstadoEnsayoConcreto.APROBADA.value())) {
                guia.setSelected(isAllChecks());

            }

        }
        return true;
    }

    /**
     * @return the fechaVaceadoDesde
     */
    public Date getFechaVaceadoDesde() {
        return fechaVaceadoDesde;
    }

    /**
     * @param fechaVaceadoDesde the fechaVaceadoDesde to set
     */
    public void setFechaVaceadoDesde(Date fechaVaceadoDesde) {
        this.fechaVaceadoDesde = fechaVaceadoDesde;
    }

    /**
     * @return the fechaVaceadoHasta
     */
    public Date getFechaVaceadoHasta() {
        return fechaVaceadoHasta;
    }

    /**
     * @param fechaVaceadoHasta the fechaVaceadoHasta to set
     */
    public void setFechaVaceadoHasta(Date fechaVaceadoHasta) {
        this.fechaVaceadoHasta = fechaVaceadoHasta;
    }

    /**
     * @return the indMuestreo
     */
    /**
     * @return the mensajeGuiasRemision
     */
    public String getMensajeGuiasRemision() {
        return mensajeGuiasRemision;
    }

    /**
     * @param mensajeGuiasRemision the mensajeGuiasRemision to set
     */
    public void setMensajeGuiasRemision(String mensajeGuiasRemision) {
        this.mensajeGuiasRemision = mensajeGuiasRemision;
    }

    /**
     * @return the selectedFgMuestreo
     */
    public boolean isSelectedFgMuestreo() {
        return selectedFgMuestreo;
    }

    /**
     * @param selectedFgMuestreo the selectedFgMuestreo to set
     */
    public void setSelectedFgMuestreo(boolean selectedFgMuestreo) {
        this.selectedFgMuestreo = selectedFgMuestreo;
    }

    /**
     * @return the serieGuiaPdf
     */
    public UIParameter getSerieGuiaPdf() {
        return serieGuiaPdf;
    }

    /**
     * @param serieGuiaPdf the serieGuiaPdf to set
     */
    public void setSerieGuiaPdf(UIParameter serieGuiaPdf) {
        this.serieGuiaPdf = serieGuiaPdf;
    }

    /**
     * @return the numeroGuiaPdf
     */
    public UIParameter getNumeroGuiaPdf() {
        return numeroGuiaPdf;
    }

    /**
     * @param numeroGuiaPdf the numeroGuiaPdf to set
     */
    public void setNumeroGuiaPdf(UIParameter numeroGuiaPdf) {
        this.numeroGuiaPdf = numeroGuiaPdf;
    }

    /**
     * @return the imagenPdf
     */
    public String getImagenPdf() {
        return imagenPdf;
    }

    /**
     * @param imagenPdf the imagenPdf to set
     */
    public void setImagenPdf(String imagenPdf) {
        this.imagenPdf = imagenPdf;
    }

    /**
     * @return the altPdf
     */
    public String getAltPdf() {
        return altPdf;
    }

    /**
     * @param altPdf the altPdf to set
     */
    public void setAltPdf(String altPdf) {
        this.altPdf = altPdf;
    }

    /**
     * @return the imagenRelog
     */
    public String getImagenRelog() {
        return imagenRelog;
    }

    /**
     * @param imagenRelog the imagenRelog to set
     */
    public void setImagenRelog(String imagenRelog) {
        this.imagenRelog = imagenRelog;
    }

    /**
     * @return the altRelog
     */
    public String getAltRelog() {
        return altRelog;
    }

    /**
     * @param altRelog the altRelog to set
     */
    public void setAltRelog(String altRelog) {
        this.altRelog = altRelog;
    }

    /**
     * @return the guiasVb
     */
    public List<GuiaDeRemisionViewBean> getGuiasVb() {
        return guiasVb;
    }

    /**
     * @param guiasVb the guiasVb to set
     */
    public void setGuiasVb(List<GuiaDeRemisionViewBean> guiasVb) {
        this.guiasVb = guiasVb;
    }

    /**
     * @return the guias
     */
    public List<GuiaDeRemisionBean> getGuias() {
        return guias;
    }

    /**
     * @param guias the guias to set
     */
    public void setGuias(List<GuiaDeRemisionBean> guias) {
        this.guias = guias;
    }

    /**
     * @return the fgPerdida
     */
    public UIParameter getFgPerdida() {
        return fgPerdida;
    }

    /**
     * @param fgPerdida the fgPerdida to set
     */
    public void setFgPerdida(UIParameter fgPerdida) {
        this.fgPerdida = fgPerdida;
    }

    /**
     * @return the moPerdida
     */
    public UIParameter getMoPerdida() {
        return moPerdida;
    }

    /**
     * @param moPerdida the moPerdida to set
     */
    public void setMoPerdida(UIParameter moPerdida) {
        this.moPerdida = moPerdida;
    }

    /**
     * @return the imagenFalla
     */
    public String getImagenFalla() {
        return imagenFalla;
    }

    /**
     * @param imagenFalla the imagenFalla to set
     */
    public void setImagenFalla(String imagenFalla) {
        this.imagenFalla = imagenFalla;
    }

    /**
     * @return the altFalla
     */
    public String getAltFalla() {
        return altFalla;
    }

    /**
     * @param altFalla the altFalla to set
     */
    public void setAltFalla(String altFalla) {
        this.altFalla = altFalla;
    }

    /**
     * @return the imagenPerdida
     */
    public String getImagenPerdida() {
        return imagenPerdida;
    }

    /**
     * @param imagenPerdida the imagenPerdida to set
     */
    public void setImagenPerdida(String imagenPerdida) {
        this.imagenPerdida = imagenPerdida;
    }

    /**
     * @return the altPerdida
     */
    public String getAltPerdida() {
        return altPerdida;
    }

    /**
     * @param altPerdida the altPerdida to set
     */
    public void setAltPerdida(String altPerdida) {
        this.altPerdida = altPerdida;
    }

    public boolean selectedLeyendaCheck(ValueChangeEvent e) {

        if (isPopupConsultarDetallePedidoLeyenda()) {
            closePopupLeyenda();
        } else {
            openPopupLeyenda();
        }

        return true;
    }

    /**
     * @param exportarCertificadosPdf the exportarCertificadosPdf to set
     */
    public void setExportarCertificadosPdf(String exportarCertificadosPdf) {
        this.exportarCertificadosPdf = exportarCertificadosPdf;
    }

    /**
     * @return the numeroGuia
     */
    public String getNumeroGuia() {
        return numeroGuia;
    }

    /**
     * @param numeroGuia the numeroGuia to set
     */
    public void setNumeroGuia(String numeroGuia) {
        this.numeroGuia = numeroGuia;
    }

    /**
     * @return the selectedTipoResultado
     */
    public String getSelectedTipoResultado() {
        return selectedTipoResultado;
    }

    /**
     * @param selectedTipoResultado the selectedTipoResultado to set
     */
    public void setSelectedTipoResultado(String selectedTipoResultado) {
        this.selectedTipoResultado = selectedTipoResultado;
    }

    /**
     * @return the serieGuia
     */
    public String getSerieGuia() {
        return serieGuia;
    }

    /**
     * @param serieGuia the serieGuia to set
     */
    public void setSerieGuia(String serieGuia) {
        this.serieGuia = serieGuia;
    }
}
